package com.seven.good.dao;

import com.seven.good.dto.GoodConditionDto;
import com.seven.good.pojo.Good;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;
import java.util.List;

public interface GoodMapper {
    int deleteByPrimaryKey(Integer gid);

    int insert(Good record);

    int insertSelective(Good record);

    Good selectByPrimaryKey(Integer gid);

    int updateByPrimaryKeySelective(Good record);

    int updateByPrimaryKey(Good record);

    /**
     * @Description：根据当前围观数，从大到小查询推荐商品
     * @Author: ytj
     * @param: num 显示的个数
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsByCircuseeNo(Integer num);

    /**
     * @Description：根据当前竞拍次数，从大到小查询推荐商品
     * @Author: ytj
     * @param: num 显示的个数
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsByBidNo(Integer num);

    /**
     * @Description：根据当前报名参与次数，从大到小查询推荐商品
     * @Author: ytj
     * @param: num 显示的个数
     * @return List<Good> 商品列表
     * @CreateDate:  19/10/16
     */
    List<Good> listGoodsBySignUpNo(Integer num);

    /**
     * @Description：获取在拍卖时间段，未拍卖状态的商品列表
     * @Author: ytj
     * @return  List<Good> 开拍商品列表
     * @CreateDate:  19/10/17
     */
    List<Good> listGoodsIsAuction();

    /**
     * @Description：更新商品状态（2：已开拍）：
     * @Author: ytj
     * @param: gid 商品编号
     * @CreateDate:  19/10/19
     */
    @Update("update good set good_state = 2 where gid = #{gid}")
    void updateGoodStateById(Integer gid);


    /**
     * @Description：获取当前最大价格的商品
     * @Author: ytj
     * @return Good 具最大价格的商品
     * @CreateDate:  19/10/19
     */
    Good getExGood();

    /**
     * @Description：更新结束时间
     * @Author: ytj
     * @CreateDate:  19/10/20
     */
    @Update("update good set end_time = end_time + 300 where gid = #{gid}")
    int updateEndtime(Integer gid);

    /**
     * @ Description   :  得到今天未开拍、已开拍、延时中的分页商品，结束时间越早越靠前
     * @ Author        :  lee
     * @ param        : goodType：商品类型；currentPage：当前页；pageSize：单页展示数目；
     * @ return       : List<Good>：商品的列表
     * @ exception    :
     * @ CreateDate    :  2019/10/16 10:06
     */
    List<Good> selectByTypeOnToday(@Param("goodType") Integer goodType,
                                   @Param("currentPage") Integer currentPage,
                                   @Param("pageSize")Integer pageSize);
    /**
     * @ Description   :  按商品类型查，根据多种商品拍卖状态查出商品，按状态字段升序和结束时间升序排序
     * @ Author        :  lee
     * @ param        : goodType：商品类型；goodStates：商品状态数组；currentPage：当前页；pageSize：单页展示数目；
     * @ return       : List<Good>：商品的列表
     * @ exception    :
     * @ CreateDate    :  2019/10/17 16:37
     */
    List<Good> selectByCondition(@Param("condition")GoodConditionDto condition,
                                 @Param("currentPage") Integer currentPage,
                                 @Param("pageSize")Integer pageSize);

    Integer updateUrlByGid(@Param("url") String url,@Param("gid") Integer gid);

    Integer insertAndGetGid(Good good);


    //更新报名人数方法
    @Update("update good set signup_no = signup_no + 1 where gid = #{gid} and flag=0")
    int updateSignupNoByGid(Integer gid);

    //更新提醒人数方法
    @Update("update good set remind_no = remind_no + 1 where gid = #{gid} and flag=0")
    int updateRemindNoByGid(Integer gid);

    //更新围观人数方法
    @Update("update good set circusee_no = circusee_no + 1 where gid = #{gid} and flag=0")
    int updateCircuseeNoByGid(Integer gid);

    @Update("update good set now_price = #{bidPrice},bid_no = bid_no+1 where gid = #{gid} and flag=0")
    void updateNowPriceAndBidNo(Integer gid, Integer bidPrice);

    @Update("update good set flag = 1 where now()<start_time and gid = #{gid}")
    int deleteByGid(Integer gid);

    @Update("update good set deal_price = #{price} where gid = #{gid}")
    void updateDealPrice(int gid, BigDecimal price);

    @Select("select publisher from good where gid=#{gid} and flag=0")
    int getPublisherIdByGid(Integer gid);
}